Another PAE fix for pgd_ctor.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 24 Nov 2005 18:40:18 +0000 (19:40 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 24 Nov 2005 18:40:18 +0000 (19:40 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c

index a894a54ede52c04493cccc88d8d73eef65f04db9..e9d2d745fb86b52b36de8058ec24e282efd1ab88 100644 (file)
@@ -285,19 +285,18 @@ void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused)
        BUG_ON(rc);
 #endif
 
-       if (!HAVE_SHARED_KERNEL_PMD)
-               spin_lock_irqsave(&pgd_lock, flags);
-
-       memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD,
-                       swapper_pg_dir + USER_PTRS_PER_PGD,
-                       (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
-
-       if (HAVE_SHARED_KERNEL_PMD)
+       if (HAVE_SHARED_KERNEL_PMD) {
+               memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD,
+                      swapper_pg_dir + USER_PTRS_PER_PGD,
+                      (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
                return;
+       }
+
+       memset(pgd, 0, PTRS_PER_PGD*sizeof(pgd_t));
 
+       spin_lock_irqsave(&pgd_lock, flags);
        pgd_list_add(pgd);
        spin_unlock_irqrestore(&pgd_lock, flags);
-       memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t));
 }
 
 void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused)